package org.lanqiao.music.system.service.impl;

import org.apache.ibatis.annotations.Delete;
import org.lanqiao.music.common.dto.AlbumDTO;
import org.lanqiao.music.system.dao.AlbumMusicDao;
import org.lanqiao.music.system.entity.Album;
import org.lanqiao.music.system.dao.AlbumDao;
import org.lanqiao.music.system.service.AlbumService;
import org.lanqiao.music.system.vo.AlbumVo;
import org.lanqiao.music.system.vo.AllVo;
import org.lanqiao.music.system.vo.HotMusicVo;
import org.lanqiao.music.system.vo.MusicVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import com.github.pagehelper.PageInfo;
import com.github.pagehelper.PageHelper;
import org.lanqiao.music.common.utils.PageDTO;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;

/**
 * (Album)表服务实现类
 *
 * @author makejava
 * @since 2024-08-15 20:50:29
 */
@Service("albumService")
public class AlbumServiceImpl implements AlbumService {
    @Resource
    private AlbumDao albumDao;

    private AlbumMusicDao albumMusicDao;

    @Autowired
    private RedisTemplate<String,Object> redisTemplate;

    /*@Override
    public List<Album> getAllAlbums() {
        return albumDao.queryAllByLimit();
    }
*/
    /**
     * 通过ID查询单条数据
     *
     * @param albumId 主键
     * @return 实例对象
     */
    @Override
    public Album queryById(Integer albumId) {
        return this.albumDao.queryById(albumId);
    }

    /**
     * 分页查询
     *
     * @param album 筛选条件
     * @return 查询结果
     */
    @Override
    public PageInfo<Album> queryByPage(Album album, PageDTO pageDTO) {
        PageHelper.startPage(pageDTO.getPageNum(),pageDTO.getPageSize());
        PageInfo page = new PageInfo<>(this.albumDao.queryAllByLimit(album));
        return page;
    }

    /**
     * 新增数据
     *
     * @param album 实例对象
     * @return 实例对象
     */
    @Override
    public Album insert(Album album) {
        this.albumDao.insert(album);
        return album;
    }

    /**
     * 修改数据
     *
     * @param album 实例对象
     * @return 实例对象
     */
    @Override
    public Album update(Album album) {
        this.albumDao.update(album);
        return this.queryById(album.getAlbumId());
    }

    /**
     * 通过主键删除数据
     *
     * @param albumId 主键
     * @return 是否成功
     */
    @Override
    public boolean deleteById(Integer albumId) {
        return this.albumDao.deleteById(albumId) > 0;
    }
    /*
     * 通过专辑ID查询信息
     * */

    @Override
    public List<Album> quaryAllAlbums() {
        return albumDao.queryAllAlbum();
    }

    @Override
    public AlbumVo searchAlbumMusic(AlbumDTO dto) {
        AlbumVo vo = new AlbumVo();
        vo.setAlbumId(dto.getAlbumId());
        vo.setAlbumName(albumDao.searchAlbumMusic(dto).get(0).getAlbumName());
        vo.setAlbumPic(albumDao.searchAlbumMusic(dto).get(0).getAlbumPic());
        vo.setSingerId(albumDao.searchAlbumMusic(dto).get(0).getSingerId());
        vo.setSingerName(albumDao.searchAlbumMusic(dto).get(0).getSingerName());
        List<String> musicName = new ArrayList<>();
        List<Integer> musicId = new ArrayList<>();
        for (AllVo allVo : albumDao.searchAlbumMusic(dto)){
            musicName.add(allVo.getMusicName());
            musicId.add(allVo.getMusicId());
        }
        vo.setMusicId(musicId);
        vo.setMusicName(musicName);
        return vo;
    }

    @Override
    public List<AlbumVo> getHotAlbumMusic(){
        System.out.println("热点数据get service");
        Set<Object> hotAlbum = redisTemplate.opsForZSet().reverseRangeByScore("hotAlbum", 1, 6);
        List<AlbumVo> hotAlbumVos = new ArrayList<>();
        for (Object o : hotAlbum){
            System.out.println(o);
            AlbumDTO albumDTO = new AlbumDTO();
            albumDTO.setAlbumId((Integer) o);
            hotAlbumVos.add(searchAlbumMusic(albumDTO));
        }
        return hotAlbumVos;
    }
}
